iT邦幫忙

2022 iThome 鐵人賽

DAY 27
0
DevOps

自動化測試大作戰系列 第 27

情境題—會員註冊(二)

  • 分享至 

  • xImage
  •  

Medium 清新閱讀版連結

今天就讓我們依照前一天的情境題,來撰寫測試案例函數吧!

這次同樣地,先讓我們規畫擬訂測試案例:

測試案例

  1. 使用者註冊:
    1. 使用者可送出註冊資料,系統將建立使用者資料,並送出含有專屬驗證連結之驗證信,當此驗證連結被開啟後,將讓使用者轉為已驗證狀態
  2. 請求錯誤的驗證連結
    1. 錯誤的驗證連結被開啟後,使用者之驗證狀態應保持不變

話不多說,來寫 Code !

測試案例函數實作

  • tests/Feature/UserControllerTest.php

    <?php
    
    namespace Tests\Feature;
    
    use App\Mail\VerifyUserMail;
    use App\Models\User;
    use Illuminate\Foundation\Testing\RefreshDatabase;
    use Illuminate\Foundation\Testing\WithFaker;
    use Illuminate\Support\Facades\Mail;
    use Tests\TestCase;
    
    class UserControllerTest extends TestCase
    {
        use WithFaker;
        use RefreshDatabase;
    
        public function testRegisterAndVerifySuccess()
        {
            Mail::fake();
    
            $data = [
                'name' => $this->faker->name,
                'email' => $this->faker->email,
                'password' => $this->faker->password,
            ];
    
            $response = $this->post(route('register'), $data);
            $response->assertOk();
    
            $this->assertDatabaseHas('users', [
                'email' => $data['email'],
            ]);
    
            $verifyLink = null;
            $userId = null;
    
            Mail::assertSent(VerifyUserMail::class, function ($mail) use (&$verifyLink, &$userId) {
                $user = User::first();
                $userId = $user->id;
                $token = $user->verify_email_token;
    
                $mail->build();
                $viewData = $mail->viewData;
    
                $verifyLink = route('verify-user-email', ['token' => $token]);
    
                $assertRecipient = $mail->hasTo($user->email);
                $assertVerifyLink = isset($viewData['verifyLink']) &&
                    $viewData['verifyLink'] === $verifyLink;
    
                return $assertRecipient && $assertVerifyLink;
            });
    
            $response = $this->get($verifyLink);
            $response->assertOk();
    
            $this->assertDatabaseMissing('users', [
                'id' => $userId,
                'email_verified_at' => null,
            ]);
        }
    
        public function testVerifyFailedWhenGotWrongLink()
        {
            $user = User::factory()->create();
            $token = $user->verify_email_token . 'x';
            $verifyLink = route('verify-user-email', ['token' => $token]);
    
            $response = $this->get($verifyLink);
            $response->assertNotFound();
    
            $this->assertDatabaseHas('users', [
                'id' => $user->id,
                'email_verified_at' => null,
            ]);
        }
    }
    

    在以上程式碼中,我們實作了以下測試案例函數:

    • testRegisterAndVerifySuccess()

      在這個測試案例函數中,我們驗證了完整的驗證流程,從使用者送出註冊資料、系統建立使用者資料並寄出驗證信、使用者點選驗證連結、更新使用者驗證時間等。

    • testVerifyFailedWhenGotWrongLink()

      在這個測試案例函數中,我們驗證了當不正確的驗證連結被請求時,將不會讓使用者的驗證狀態轉變為已驗證。

    以上就是今天的練習,希望對大家有所幫助。

    明天讓我們探討多重資料庫連線的情境吧!


上一篇
情境題—會員註冊(一)
下一篇
情境題—多重資料庫連線(一)
系列文
自動化測試大作戰31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言